#!/usr/bin/perl -- use strict; use warnings; use lib '/home/dsktnk/local/lib/perl5'; use encoding "utf8"; use Path::Class; use Text::Markdown::Discount qw/markdown/; use YAML::XS; use CGI; use Data::Pageset; my $obj = new CGI; my $page = $obj->param('p'); $page ||= "1"; my $baseurl="http://dsktnk.sakura.ne.jp/memo/"; print qq|Content-type: text/html\n\n|; print &header_html; print qq|<h1>homepage of dsktnk</h1>|; #繝�ぅ繝ャ繧ッ繝医Μ驟堺ク九↓縺ゅk繝輔ぃ繧、繝ォ繝ェ繧ケ繝医r菴懈��亥�蟶ー逧�シ� my @files; Path::Class::Dir->new("/home/dsktnk/www/memo")->recurse( callback => sub { my $file = shift; return if $file->is_dir; #繝�ぅ繝ャ繧ッ繝医Μ縺ッ繧ケ繧ュ繝�� if ($file=~/.md$/){ push(@files, $file); } }, ); #譖エ譁ー譎る俣縺ァ繧ス繝シ繝医@縺ェ縺後i驟榊�縺ォ蜈・繧後k @files = sort {$b->stat->mtime <=> $a->stat->mtime} @files; my $total_entries=@files; my $current_page=$page; my $entries_per_page =5; my $pages_per_set = 10; my $page_info = Data::Pageset->new({ 'total_entries' => $total_entries, #縺吶∋縺ヲ縺ョ隕∫エ�謨ー(蜈ィ繝偵ャ繝域焚) 'entries_per_page' => $entries_per_page, #1繝壹�繧ク縺ゅ◆繧翫�隕∫エ�陦ィ遉コ謨ー 'current_page' => $current_page, #迴セ蝨ィ縺ョ繝壹�繧ク 'pages_per_set' => $pages_per_set, #1繝壹�繧ク縺ゅ◆繧翫�繝壹�繧ク繝ウ繧ー謨ー => 10 'mode' => 'slide', #繝壹�繧ク繝ウ繧ー繧定。ィ遉コ繝壹�繧ク蟷�r蝗コ螳壹☆繧九°繧ケ繝ゥ繧、繝峨☆繧九° #'slide' or 'fixed' }); my $CarrentMinNum = ($page - 1) * ($entries_per_page + 1); my $CarrentMaxNum = $CarrentMinNum + $entries_per_page; for my $f (@files[$CarrentMinNum..$CarrentMaxNum]){ if ($f=~/.md$/){ my $data = $f->slurp; #stat #譖エ譁ー譎る俣縺ィ繝輔ぃ繧、繝ォ繧オ繧、繧コ繧貞叙蠕� my $mtime = localtime($f->stat->mtime); my $file_size = $f->stat->size; #譎る俣 my ($sec, $min, $hour, $mday, $month, $year, $wday, $stime) = localtime($f->stat->mtime); $year += 1900; ++$month; my @wdays = ("譌・", "譛�", "轣ォ", "豌エ", "譛ィ", "驥�", "蝨�"); # YAML frontmatter my ($yaml_frontmatter,@y_line); if ($data =~/^-{3}${1}(.*?)-{3}${1}/s){ $yaml_frontmatter = "$1"; } my $yf = YAML::XS::Load($yaml_frontmatter); # Markdown my @line = split ( /\n/ , $data ); my ($ln,$line); my $i=0; my $item ="---"; foreach $ln(@line){ if ($ln =~ /^$item/){ $i++; } elsif($i>1){ $line .= "$ln\n"; } } #讎りヲ� my $description = substr($line, 0, 400); $description =~s/^.*\n=+$//m; $description =~s/^#[^#]*?$"//m; my $html = markdown($description); #繝輔ぃ繧、繝ォ繝阪�繝�繧貞叙蠕� my $file = file($f); my $basename=$file->basename; #逶ク蟇セ繝代せ繧貞叙蠕� my $fileurl=$file->relative; printf "<a href=\"$baseurl$fileurl\"><h2>%04d/%02d/%02d %02d:%02d<\/h2><\/a>", $year, $month, $mday, $hour, $min, $sec; # print qq|<a href="$baseurl$fileurl">$yf->{title}</a></h2>|; # print "Filename:$basename縲譛邨よ峩譁ー譌・譎�:$mtime $file_size(byte)<br>"; print "$html<br><br>"; } } print "<br>"; #蜑阪∈ if ($page_info->previous_page) { print "<a href='?p=" . $page_info->previous_page . "'><< 蜑阪∈</a>\n"; } #繝壹�繧ク蛻・繝ェ繝ウ繧ッ foreach my $page (@{$page_info->pages_in_set()}) { if($page == $page_info->current_page()) { print " <strong>$page</strong>\n "; } else { print " <a href='?p=" . $page . "'>$page</a>\n "; } } #谺。縺ク if ($page_info->next_page) { print "<a href='?p=" . $page_info->next_page . "'>谺。縺ク >></a>\n"; } sub header_html{ my $printlines = <<"__EOF__"; <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta name="author" content="dsk" /> <link rel="stylesheet" href="http://dsktnk.sakura.ne.jp/test/github-markdown-css/github-markdown.css" type="text/css"> <style> .markdown-body { min-width: 200px; max-width: 790px; margin: 0 auto; padding: 30px; } </style> </head> <body> <article class="markdown-body"> __EOF__ return $printlines; }